home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Software Contest 3
/
FM Towns Software Contest 3.iso
/
exp
/
bpp
/
no1
/
bppre.doc
< prev
next >
Wrap
Text File
|
1994-01-07
|
11KB
|
505 lines
BPPreference
BPP
BASIC Pre-Processor
Version 0.90
リファレンスマニュアル
- 1 -
BPPreference
☆識別子について
ローカル変数、サブルーチンなどの識別子(名前)は、BASICでの識別子
の命令規則に準じます。
■■ #DEFINE ■■
《書式 1》 #DEFINE macro-id [ rep-string ]
《書式 2》 #DEFINE macro-id ( param_1 [,pram_2[,…] ] ) rep-string
《用 例》 #DEFINE NDEBUG
#DEFINE MA 100
#DEFINE ADD (a,b) (a)+(b)
《解 説》 マクロを定義します。プログラム中の macro-id を rep-string に置
き換えます。
仮引数 param_n が指定されているときは rep-string 中の仮引数を
展開します。
《参 照》 #IFDEF , #IFNDEF
《サンプル》 ' DEFINE.BPP
#DEFINE NDEBUG
#DEFINE MAX 100
#DEFINE ADD(a,b) (a)+(b)
FOR I=1 TO MAX
PRINT ADD(I,I+1)
#IFNDEF NDEBUG
PRINT I
#ENDIF
NEXT
END
- 2 -
BPPreference
■■ #IFNDEF ~ #ENDIF ■■
《書 式》 #IFDEF macro-id
<statements>
#ENDIF
《解 説》 macro-id がマクロとして定義されていれば、対応する #ENDIF まで
の文を有効にします。そうでなければ #ENDIF までの文を無効にしま
す。#IFDEF , #IFNDEF の構文はネスト出来ます。
《参 照》 #DEFINE , #IFNDEF
■■ #IFNDEF ~ #ENDIF ■■
《書 式》 #IFNDEF macro-id
<statements>
#ENDIF
《解 説》 macro-id がマクロとして定義されていなければ、 対応する #ENDIF
までの文を有効にします。そうでなければ #ENDIF までの文を無効に
します。#IFDEF , #IFNDEF の構文はネスト出来ます。
《参 照》 #DEFINE , #IFNDEF
■■ BREAK ■■
《書 式》 BREAK
《解 説》 WHILE , DO ,FOR ループを1段抜け出す。
《参 照》 WHILE , DO , FOR
《サンプル》 ' BREAK.BPP -1が代入されたらデータの入力を中止します
DIM D(10)
FOR I=0 TO 10
INPUT D(I)
IF D(I)=-1 THEN BREAK
NEXT
END
- 3 -
BPPreference
■■ CALL ■■
《書式 1》 CALL subroutine-id
《書式 2》 CALL subroutine-id ( param_1 [ , param_2… ])
《用例 1》 CALL MAIN
《用例 2》 CALL CATSTR ( "ABC" , "DEF" )
《解 説》 ユーザー定義サブルーチンを呼び出します。
パラメータ param_n が指定されているときはそれをサブルーチンに
引き渡します。
《参 照》 SUB
■■ DEFSNG ■■
■■ DEFDBL ■■
■■ DEFSTR ■■
■■ DEFINT ■■
《書 式》 DEFSNG A-Z
DEFDBL A-Z
DEFSTR A-Z
DEFINT A-Z
《解 説》 デフォルトの変数型(!,#,$,%の型指定を行わない変数の型)
を設定します。DEFSNGはデフォルトの変数型を単精度に、
DEFDBLは倍精度に、DEFSTRはもじれつ型に、
DEFINTは整数型に、それぞれ設定します。BPPの初期設定で
はDEFSNGが指定されたのと同じ状態になっています。
BASICのように変数名の1文字目による指定は出来ません。例え
ば、DEFINTはBASICでのDEFINT A-Zと等価です。
また、BASICインタプリタではDEF???の効力の範囲は実行
の順によって決まりますが、BPPではプログラムの出現の順によっ
て決まります。
《サンプル》 DEFINT
GOSUB *SUBROUTINE
A="ABC" 'ERROR!!
END
*SUBROUTINE
DEFSTR
B="CDE" 'OK!!
RETURN
- 4 -
BPPreference
■■ DO ~ LOOP ■■
《書 式》 DO
<statements>
LOOP cond-expr
《解 説》 条件式 cond-expr が偽になるまで ststements を実行します。 条件
式の評価は statements の実行後に行われるため、少なくとも1回は
statements が実行されます。
《参 照》 FOR , WHILE
《サンプル》 ' DO.BPP *が入力されると終了します。
DO
INPUT A$
LOOP A$<>"*"
END
■■ FOR ~ NEXT ■■
《書式 1》 FOR ctrl-var = from TO to [ STEP step ]
<statements>
NEXT
《書式 2》 FOR init-expr , cond-expr , loop-expr
<statements>
NEXT
《解 説》 書式1はBASICのFOR文に準じます。
書式2では、まず式 init-expr が実行され、その後条件式
cond-expr が真の間 statements と式 loop-expr を実行します。
statements 及び loop-expr は一度も実行されないことも有り得ます。
《参 照》 DO , WHILE
《サンプル》 ' FOR.BPP 1から10までの数字が2回出力されます。
FOR I=0 TO 10 '書式1
PRINT I
NEXT
FOR I=0 , I<-10 , I=I+1 '書式2
PRINT I
NEXT
END
- 5 -
BPPreference
■■ IF ~ THEN ~ ELSE ~ ENDIF ■■
《書式 1》 IF cond-expr THEN statements_1 [ELSE statements_2 ]
《書式 2》 IF cond-expr THEN
<statements_1>
[ELSE
<statements_2> ]
ENDIF
《書式 3》 IF cond-expr_1 THEN
<statements_1>
ELSEIF cond-expr_2 THEN
<statements_2>
[ ELSE
<statements_3> ]
ENDIF
《解 説》 書式1は、BASICのIF構文に準じます。
書式2は、条件式 cond-expr が真ならばstatements_1 を、偽ならば
statements_2 を実行します。ELSE説 <statements_2> が指定さ
れなければ ENDIF の次の文から実行します。
書式3は、条件式 cond-expr_1 が真ならば statements_1 を、 そう
でなければ条件式 cond-expr_2 を評価し、真ならば statements_2
を、偽ならば statements_3 を実行します。
ELSEIF節は複数個存在しても構いません。
《サンプル》 ' IF.BPP
INPUT N
IF N=1 THEN
PRINT "A"
ELSEIF N=2 THEN
PRINT "B"
ELSEIF N=3 THEN
PRINT "C"
ELSE
PRINT "ERROR!!"
ENDIF
END
■■ #INCLUDE ■■
《書 式》 #INCLUDE <filespec>
《用 例》 #INCLUDE <COMMON.BI>
《解 説》 ファイル filespec を、この文が有る位置に挿入します。この事をイ
ンクリュードといいます。
インクリュードされたファイルの中で別のファイルをインクリュード
しても構いません。
- 6 -
BPPreference
■■ MAKESTACK ■■
《書 式》 MAKESTACK n1,n2,n3,n4
《用 例》 MAKESTACK 512,0,512,128
《解 説》 スタックフレームを生成します。ユーザー定義サブルーチンを利用す
る場合には、必ずこの宣言をしておかなければなりません。
n1 , n2 , n3 , n4 にはそれぞれ、単精度、倍精度、文字列型、整数
型のスタックの大きさを指定します。この順番は、キートップの左上
から並んでいる型指定記号 ! # $ % にそっています。
《参 照》 SUB
- 7 -
BPPreference
■■ SUB ~ ENDSUB ■■
■■ LOCAL ■■
■■ EXITSUB ■■
《書 式》 SUB subroutine-id [ ( [ BYBODY ] arg1 [ , [ BYBODY ] arg2 … ]
) ]
[ LOCAL var1 [ , var2 … ] ]
[ LOCAL … ]
<statements>
… EXITSUB …
<statements>
ENDSUB
《解 説》 ユーザー定義サブルーチン subroutine-id を定義します。
仮引数 arg1 を指定すると、CALL文でサブルーチンを呼び出すと
きに、サブルーチンにパラメータを引き渡すことが出来ます。
パラメータは値渡し(呼ばれた側から変更できない)ですが、キーワ
ード BYBODY を仮引数の前に指定すると、実体を渡します(パラメー
タをサブルーチン側から変更できます)。
SUB定義の次の行には、そのサブルーチン内で使用するローカル変
数を宣言します。ローカル変数の宣言は複数行に渡って記述すること
が出来ます。
ローカル変数と同名同型のグローバル変数が存在する場合はローカル
変数の方が優先されます。
サブルーチンの途中でサブルーチンを抜け出したい場合には、
EXITSUBを使用します。SUB文で定義したサブルーチンでは
RETURN文を使用しないでください。
ユーザー定義サブルーチンを使用するときには、MAKESTACK
及びCLEAR文で、十分なスタックを確保しておいてください。
《参 照》 MAKESTACK
《サンプル》 ' FACT.BPP n!(nの階乗)を再帰を使って求めます。
INPUT "n?";N
CALL FACT(R,N)
PRINT "n!=";R
END
SUB FACT(BYBODY R,N)
IF N=1 THEN R=1:EXITSUB
FACT(R,N-1)
R=R*N
ENDSUB
■■ WHILE ~ WEND ■■
《書 式》 WHIKW cond-expr
<statements>
WEND
《解 説》 cond-expr が真の間 statements を実行します。
BASICの使用に準じます。
《参 照》 DO , FOR
- 8 -